<template>
  <div class="table-case">
    <MyTable :data="goods">
      <template #head>
        <th>编号</th>
        <th>名称</th>
        <th>图片</th>
        <th width="100px">标签</th>
      </template>
      <template #body="{item, index}">
        <td>{{ index + 1 }}</td>
        <td>{{ item.name }}</td>
        <td>
          <img :src="item.picture" />
        </td>
        <td>
          <!--标签占位-->
          <MyTag v-model="item.tag"></MyTag>
        </td>
      </template>
    </MyTable>
  </div>
</template>

<script>
/*
综合案例 - 商品列表
需求说明:
1.my-tag 标签组件封装
  (1)双击显示输入框，输入框获取焦点
    v-if v-else @dbclick
    自动聚焦:
     1.$nextTick => $refs 获取到dom，进行focus获取焦点
     2.封装v-focus指令
  (2)失去焦点，隐藏输入框
    @blur 操作isEdit
  (3)双击回显标签信息
    回显的标签信息是父组件传递过来的
    v-model实现功能 (简化代码) v-model => :value 和 @input
    组件内部通过props接收，:value设置给输入框
  (4)内容修改，回车 -->修改标签信息
    @keyup.enter，触发事件 $emit('input'，e.target.value)
2.my-table 表格组件封装
  (1)动态传递表格数据渲染
     数据不能写死，动态传递表格渲染的数据 props
     结构不能写死 - 多处结构自定义[具名插槽] (2)(3)
  (2)表头支持用户自定义
  (3)主体支持用户自定义
*/

import MyTable from './components/MyTable.vue';
import MyTag from './components/MyTag.vue';

export default {
  name: 'TableCase',
  components: {
    MyTable, MyTag
  },
  data() {
    return {

      goods: [
        {
          id: 101,
          picture:
            'https://yanxuan-item.nosdn.127.net/f8c37ffa41ab1eb84bff499e1f6acfc7.jpg',
          name: '梨皮朱泥三绝清代小品壶经典款紫砂壶',
          tag: '茶具',
        },
        {
          id: 102,
          picture:
            'https://yanxuan-item.nosdn.127.net/221317c85274a188174352474b859d7b.jpg',
          name: '全防水HABU旋钮牛皮户外徒步鞋山宁泰抗菌',
          tag: '男鞋',
        },
        {
          id: 103,
          picture:
            'https://yanxuan-item.nosdn.127.net/cd4b840751ef4f7505c85004f0bebcb5.png',
          name: '毛茸茸小熊出没，儿童羊羔绒背心73-90cm',
          tag: '儿童服饰',
        },
        {
          id: 104,
          picture:
            'https://yanxuan-item.nosdn.127.net/56eb25a38d7a630e76a608a9360eec6b.jpg',
          name: '基础百搭，儿童套头针织毛衣1-9岁',
          tag: '儿童服饰',
        },
      ],
    }
  },

}
</script>

<style lang="less" scoped>
.table-case {
  width: 1000px;
  margin: 50px auto;

  img {
    width: 100px;
    height: 100px;
    object-fit: contain;
    vertical-align: middle;
  }
}
</style>